/*
 * FilterInterface.h
 * Author: Michal Kolodziejski
 */

#ifndef FILTERINTERFACE_H_
#define FILTERINTERFACE_H_

#include "squid.h"
#include "http.h"
#include "AbstractFilter.h"
#include <fstream>
#include <string>
#include <vector>


/* singleton */
class FilterInterface {


public:
    virtual ~FilterInterface();

    /**
     *  Singleton access method
     */
    static FilterInterface* getInstance(){
        if(!instance){
            instance = new FilterInterface;
        }
        return instance;
    }

    bool processConfig(char* path);
    bool processReply(HttpStateData *);
    bool processRequest(HttpStateData *); // bez implementacji


private:
    std:: vector <AbstractFilter *> reply_list; //lista skonfigurowanych filtrów które będą przetwarzac, zapełniana prze metode processConfig
    std:: vector <AbstractFilter *> all_filters;//lista wszystkich zarejstrowanych filtrow
    static FilterInterface *instance;
    FilterInterface();
    bool addFilter(AbstractFilter *);			//w konstrukorze dajemy wszystkie znane filtry
    bool registerFilter(char *filterName,char *patch) ;//rejestracja filtru oznacza ze zostal on skonfigurowany i bedzie przetwarzal dane wejsciowe
    bool registerFilter(std::string filterName,std::string patch);


};

#endif /* FILTERINTERFACE_H_ */
